package com.wty.swhn.wty.biz.implAsmackImpl;

import com.wty.swhn.wty.TApplication;
import com.wty.swhn.wty.biz.ILoginBiz;
import com.wty.swhn.wty.model.UserEntity;
import com.wty.swhn.wty.util.Const;

import android.content.Context;
import android.content.Intent;
import android.os.Handler;
import android.util.Log;

/**
 * Created by swhn on 2016/8/7.
 */
public class LoginBiz implements ILoginBiz {
	private final static String TAG = "LoginBiz";
	private UserEntity userEntity;
	private Context context;
	private Handler handler;
	// 判断联网线程中是否联上
	// 保证退出while
	int count = 0;

	// private static LoginBiz loginBiz;

	// private LoginBiz(final UserEntity userEntity) {
	// super();
	// this.userEntity = userEntity;
	// new Thread("LoginBiz") {
	// @Override
	// public void run() {
	// super.run();
	// // 0:成功 1：联网失败 2：登录失败
	// int status = Const.STATUS_SUCCESS;
	// try {
	//
	// long time = System.currentTimeMillis() - TApplication.appStartTime;
	// Log.i("LoginBiz", "run() 运行了 threadId=" + Thread.currentThread().getId()
	// + ","
	// + Thread.currentThread().getName() + "time=" + time);
	// // 判断联网线程中是否联上
	// // 保证退出while
	// int count = 0;
	// while (count < 500 && TApplication.xmppConnection.isConnected() == false)
	// {
	// this.sleep(10);
	// count++;
	// Log.i("LoginBiz", "run() 运行了 count=" + count);
	//
	// }
	//
	// // 一定会联上服务器
	// if (TApplication.xmppConnection.isConnected()) {
	// TApplication.xmppConnection.login(userEntity.getUserName(),
	// userEntity.getPassWord());
	// // 发广播，带数据 int
	// Intent intent = new Intent(Const.ACTION_lOGIN);
	// intent.putExtra(Const.KEY_DATA, status);
	// TApplication.instance.sendBroadcast(intent);
	// // true 登录成功，false失败
	// if (TApplication.xmppConnection.isAuthenticated()) {
	// // 登录成功，每隔4分钟发一个空包，让网关的地址转换表中的记录重新计算。
	// SendNullPackage.newInstance();
	// status = Const.STATUS_SUCCESS;
	// TApplication.currentUser = userEntity.getUserName() + "@" +
	// TApplication.serviceName;
	//
	// Log.i("LoginBiz", "登录结果=" +
	// TApplication.xmppConnection.isAuthenticated());
	// } else {
	// // 联网失败
	// status = Const.CONNECT_FAILURE;
	// }
	// }
	//
	// } catch (Exception e) {
	// e.printStackTrace();
	// // 登录失败
	// // 一般情况下，输入正确的密码就能登录成功
	// // asmack下，失败后，必须断开连接，输入正确的密码才能登录成功
	// TApplication.xmppConnection.disconnect();
	// TApplication.instance.getConnection();
	// status = Const.LOGIN_FAILURE;
	//
	// }
	//
	// }
	// }.start();
	//
	// }
	//
	// public static synchronized LoginBiz getLoginBiz(UserEntity userEntity) {
	//
	// if (loginBiz == null) {
	// loginBiz = new LoginBiz(userEntity);
	// }
	// return loginBiz;
	// }

	@Override
	public void login(final UserEntity userEntity) {
		// new Thread("LoginBiz") {
		// @Override
		// public void run() {
		// super.run();
		// // 0:成功 1：联网失败 2：登录失败
		// int status = Const.STATUS_SUCCESS;
		// try {
		//
		// long time = System.currentTimeMillis() - TApplication.appStartTime;
		// Log.i("LoginBiz", "run() 运行了 threadId=" +
		// Thread.currentThread().getId() + ","
		// + Thread.currentThread().getName() + "time=" + time);
		// // 判断联网线程中是否联上
		// // 保证退出while
		// int count = 0;
		// while (count < 5000 && TApplication.xmppConnection.isConnected() ==
		// false) {
		// this.sleep(10);
		// count++;
		// Log.i("LoginBiz", "run() 运行了 count=" + count);
		//
		// }
		//
		// // 一定会联上服务器
		// if (TApplication.xmppConnection.isConnected()) {
		// TApplication.xmppConnection.login(userEntity.getUserName(),
		// userEntity.getPassWord());
		// // 发广播，带数据 int
		// Intent intent = new Intent(Const.ACTION_lOGIN);
		// intent.putExtra(Const.KEY_DATA, status);
		// TApplication.instance.sendBroadcast(intent);
		// // true 登录成功，false失败
		// if (TApplication.xmppConnection.isAuthenticated()) {
		// // 登录成功，每隔4分钟发一个空包，让网关的地址转换表中的记录重新计算。
		// SendNullPackage.newInstance();
		// status = Const.STATUS_SUCCESS;
		// TApplication.currentUser = userEntity.getUserName() + "@" +
		// TApplication.serviceName;
		//
		// Log.i("LoginBiz", "登录结果=" +
		// TApplication.xmppConnection.isAuthenticated());
		// } else {
		// // 联网失败
		// Log.e(TAG, "连网失败-=-=");
		// status = Const.CONNECT_FAILURE;
		// TApplication.xmppConnection.disconnect();
		// }
		// }
		// // 连网失败，断开
		// if (TApplication.xmppConnection.isConnected() == false) {
		// Log.e(TAG, "连网失败-=-=");
		// TApplication.xmppConnection.disconnect();
		// TApplication.instance.openConnection();
		// }
		// } catch (Exception e) {
		// e.printStackTrace();
		// // 登录失败
		// // 一般情况下，输入正确的密码就能登录成功
		// // asmack下，失败后，必须断开连接，输入正确的密码才能登录成功
		// Log.e(TAG, "连网失败");
		// TApplication.xmppConnection.disconnect();
		// TApplication.instance.openConnection();
		// status = Const.LOGIN_FAILURE;
		//
		// }
		//
		// }
		// }.start();
	}

	public LoginBiz(Context context, final UserEntity userEntity) {
		this.context = context;
		this.userEntity = userEntity;
		// this.handler = new Handler() {
		// @Override
		// public void handleMessage(Message msg) {
		// // TODO Auto-generated method stub
		//
		// callback.getBut(0);
		// }
		// };
		new Thread("LoginBiz") {
			@Override
			public void run() {
				super.run();
				// 0:成功 1：联网失败 2：登录失败
				int status = Const.STATUS_SUCCESS;
				try {

					long time = System.currentTimeMillis() - TApplication.appStartTime;
					Log.i("LoginBiz", "run() 运行了 threadId=" + Thread.currentThread().getId() + ","
							+ Thread.currentThread().getName() + "time=" + time);
					// 判断联网线程中是否联上
					// 保证退出while
					int count = 0;
					while (count < 5000 && TApplication.xmppConnection.isConnected() == false) {
						this.sleep(10);
						count++;
						Log.i("LoginBiz", "run() 运行了 count=" + count);

					}

					// 一定会联上服务器
					if (TApplication.xmppConnection.isConnected()) {
						TApplication.xmppConnection.login(userEntity.getUserName(), userEntity.getPassWord());
						// 发广播，带数据 int
						Intent intent = new Intent(Const.ACTION_lOGIN);
						intent.putExtra(Const.KEY_DATA, status);
						TApplication.instance.sendBroadcast(intent);
						// true 登录成功，false失败
						if (TApplication.xmppConnection.isAuthenticated()) {
							// 登录成功，每隔4分钟发一个空包，让网关的地址转换表中的记录重新计算。
							SendNullPackage.newInstance();
							status = Const.STATUS_SUCCESS;
							TApplication.currentUser = userEntity.getUserName() + "@" + TApplication.serviceName;

							Log.i("LoginBiz", "登录结果=" + TApplication.xmppConnection.isAuthenticated());
						} else {
							// 联网失败
							Log.e(TAG, "连网失败-=-=");
							status = Const.CONNECT_FAILURE;
							TApplication.xmppConnection.disconnect();
						}
					}
					// 连网失败，断开
					if (TApplication.xmppConnection.isConnected() == false) {
						Log.e(TAG, "连网失败-=-=");
						TApplication.xmppConnection.disconnect();
						TApplication.instance.openConnection();
						// // 发送消息到主线程
						// Message msg = handler.obtainMessage();
						// msg.what = 1;
						// handler.sendMessage(msg);

					}
				} catch (Exception e) {
					e.printStackTrace();
					// 登录失败
					// 一般情况下，输入正确的密码就能登录成功
					// asmack下，失败后，必须断开连接，输入正确的密码才能登录成功
					Log.e(TAG, "连网失败");
					TApplication.xmppConnection.disconnect();
					TApplication.instance.openConnection();
					status = Const.LOGIN_FAILURE;

				}

			}

		}.start();

	}

	public LoginBiz(UserEntity userEntity) {
		super();
		this.userEntity = userEntity;
	}

	public interface Callback {
		void getBut(int b);
	};
}